﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using Tesseract;
using System.IO;
using System.Threading.Tasks;

namespace VstupOcr
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("VstupInfoOcr v 0.1");

                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();

                string sourcePath = "source";
                string[] filePaths = Directory.GetFiles(sourcePath, "*.*", SearchOption.TopDirectoryOnly).Where(s => s.EndsWith(".png") || s.EndsWith(".jpg")).ToArray();
                Console.WriteLine("Обнаружено " + filePaths.Length + " изображений");
                int countCore = Environment.ProcessorCount > filePaths.Length ? filePaths.Length : Environment.ProcessorCount;
                Console.WriteLine("Начато распознавание изображений. Запущено " + countCore + " потока.");

                Parallel.ForEach(filePaths, new ParallelOptions { MaxDegreeOfParallelism = countCore }, file =>
                {
                    if (file != null)
                    {
                        VstupInfoOcr ocr = new VstupInfoOcr(file);
                        ocr.Recognize();
 
                    }
                });

                stopwatch.Stop();
                long elapsed_time = stopwatch.ElapsedMilliseconds / 1000;
                Console.WriteLine("Распознавание изображений закончено. html файлы находятся в папке output");
                Console.WriteLine("Время выполнения программы: " + elapsed_time + "сек.");
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());
                Console.WriteLine("Unexpected Error: " + e.Message);
                Console.WriteLine("Details: ");
                Console.WriteLine(e.ToString());
            }
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);

        }
    }
}
